home *** CD-ROM | disk | FTP | other *** search
/ BBS Toolkit / BBS Toolkit.iso / pc_board / pcbss20.zip / SS.DOC < prev    next >
Text File  |  1992-01-19  |  88KB  |  2,170 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.                             PCBSuperScript v2.0
  22.                            ─────────────────────
  23.                               ───────────────
  24.                                  ─────────
  25.                                     ───
  26.                                      ─
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.      (c) Copyright 1990, 1991 by Chris Curran and Aquila Data Systems, Inc.
  55.                             All rights reserved.
  56.  
  57.        All trademarks and copyrights belong to their respective holders.
  58.   
  59.  
  60.   Products Used
  61.   -----------------------------------------------------------------------------
  62.  
  63.       C compiler     : Borland C++ v3.0  (Borland)
  64.       Assembler      : TASM v3.0         (Borland)
  65.       Linker         : TLink v5.0        (Borland)
  66.       Debugger       : TDebug v3.0       (Borland)
  67.       Version Control: PVCS for DOS      (Sage Software)
  68.       Editor         : QEdit 2.15        (SemWare)
  69.  
  70.  
  71.       The CKIT door library was also used in the development of this product
  72.     (version 2.10). It supports the MSC, QuickC and Turbo C compilers. It is
  73.     highly recommended to any 'C' programmer with any door project in mind.
  74.     Some 'C' programmers seem to have a problem with the number of revisions
  75.     that this library went through at the beginning - I don't. I view it as
  76.     positive reaction to user request.
  77.  
  78.     The author of CKIT can be reached via:
  79.  
  80.           Data-Comp Information Systems
  81.           Attn: Rickie W. Belitz
  82.           P.O. Box 5895
  83.           Maryville, Tenn. 37802-5895
  84.  
  85.           BBS: (615) 982-6537   (Hayes Ultra V.32, public line)
  86.  
  87.  
  88.  
  89.   Disclaimer
  90.   -----------------------------------------------------------------------------
  91.  
  92.       The author hereby disclaims all warranties relating to this product,
  93.     whether express or implied, including without limitation any implied
  94.     warranties of merchantability or fitness for a particular purpose. The
  95.     author cannot and will not be liable for any special, incidental,
  96.     consequential, indirect or similar damages due to loss of data or any
  97.     other reason, even if the author or an authorized agent has been advised
  98.     of the possibility of such damages.  In no event shall the liability for
  99.     any damages ever exceed the price paid for the license to use the
  100.     software, regardless of the form and/or extent of the claim.  The user of
  101.     this program bears all risk as to the quality and performance of the
  102.     software.
  103.  
  104.  
  105.  
  106.   License
  107.   -----------------------------------------------------------------------------
  108.  
  109.       PCBSuperScript is a Shareware product.  As such, it is made available to
  110.     the general personal computing public for evaluation. Users are licensed
  111.     to operate this program on their personal computers for the purpose of
  112.     test and evaluation on a trial basis for a limited trial period.  It is
  113.     not possible to reasonably define the limits of a fair and equitable time
  114.     period for evaluation; therefore it is left to the user's judgment and
  115.     sense of fair play as to the time required to make a decision as to its
  116.     usefulness. If the user decides the program is not of sufficient merit to
  117.     warrant purchase through registration with the author, he/she should
  118.     remove the program from his/her personal computer. Otherwise, if the
  119.     program is deemed useful and is in regular use on the user's computer
  120.     system, registration with the author is required.
  121.  
  122.       Registered users are those users who elect to pay for PCBSuperScript and
  123.     register that payment with the author.  By virtue of registration and
  124.     payment for the program, registered users are granted a license to
  125.     continue to utilize the program on their personal computer for as long as
  126.     they choose.  This license authorizes the user to use the program on any
  127.     personal computer system he or she may own or use so long as the program
  128.     is operated on only one computer system at a time.
  129.  
  130.  
  131.   Guarantee
  132.   -----------------------------------------------------------------------------
  133.  
  134.       PCBSuperScript is offered with an unconditional 30-day money-back
  135.     guarantee.  If you become dissatisfied with the program for any reason
  136.     within that period, just let me know and your registration fee will be
  137.     refunded.  If you purchased a registration package which included a
  138.     diskette and/or a manual, please return these when requesting a refund.
  139.  
  140.       This guarantee is unconditional.  I would ask, however, if you are
  141.     having a problem to let me know before giving up on PCBSuperScript since
  142.     your problem may be something I can solve.
  143.  
  144.       Finally, if you order a registration package which includes a diskette
  145.     or manual and either of these items are defective -- either through my
  146.     error or through postal service "processing", let me know and I will send
  147.     replacements promptly.
  148.  
  149.  
  150.  
  151.   Registration
  152.   -----------------------------------------------------------------------------
  153.  
  154.       The registration fee is $25, payable to:
  155.  
  156.         Aquila Data Systems
  157.         304 Bayfield Drive
  158.         Brandon, FL  33511
  159.  
  160.       The payment of this registration fee to the author entitles the user to
  161.     full use of the product for an unlimited period of time in addition to
  162.     product support.  The distribution of diskette copies of PCBSuperScript
  163.     and future upgrades is not included as part of the basic registration fee.
  164.     See the ORDER.SS file for the charges associated with these services.
  165.  
  166.       PCBSuperScript is the sole property of Chris Curran.  The program may be
  167.     freely copied and transferred to individual parties for evaluation
  168.     purposes.  It may be posted on Bulletin Board systems (BBS) for electronic
  169.     access as long as NO FEE is charged for its distribution except for
  170.     private BBS operations that charge a regular user subscription fee.
  171.     Computer information services such as Compuserve (CIS), Genie, and Byte
  172.     Information Exchange (BIX) are authorized to post this product for
  173.     subscriber access.  PCBSuperScript may be distributed on diskette only by
  174.     1) disk distributors/vendors who are associate members of the Association
  175.     of Shareware Professionals (ASP) or 2) users groups which do not charge
  176.     more than a nominal fee ($5) to cover the costs of distribution.  Any
  177.     changes to these policies must be made in writing by the author.
  178.  
  179.       PCBSuperScript is a fully functional Shareware product. Shareware is a
  180.     computer program distribution/marketing method that permits potential
  181.     buyers to thoroughly try the program prior to purchase. It is NOT free and
  182.     it is not in the Public Domain.  If, after evaluating the program, you
  183.     find it useful enough to use on a regular basis, you are expected to pay
  184.     for it by registering with the author.
  185.  
  186.       Attractively-priced site licensing is available for commercial users.
  187.     Pricing for "typical" site licensing is given later in this manual.  If
  188.     you have needs which are not met by the standard license terms, please
  189.     call or write for a quote which addresses any unique support or product
  190.     update requirements.  Customization is also available on a contract basis.
  191.  
  192.       There has been some confusion in Shareware circles recently about
  193.     upgrade/update policies for certain pieces of software.  Therefore, I'd
  194.     like to take this opportunity to spell out my policies.  First, some
  195.     definitions:  I define upgrade as the RIGHT to use a later revision of a
  196.     piece of software.  I define update as the physical media on which the
  197.     upgrade resides.  I'll further define an update as not including hard-copy
  198.     documentation unless specifically defined.  With that out of the way, I'd
  199.     like to spell out my current upgrade/update policies:
  200.  
  201.       There are no upgrade charges associated with PCBSuperScript and I do not
  202.     have any plans at present to institute such charges with future revisions.
  203.     I do reserve the right to do so, however, if in my sole opinion the nature
  204.     and magnitude of PCBSuperScript changes to such a degree as to constitute
  205.     an essentially new product.  I currently do charge for updates and plan to
  206.     continue to so charge.  The content and pricing for specific update
  207.     packages is contained in the ORDER.SS file.  Pricing is subject to change
  208.     without notice however, to accommodate postage, printing, and other price
  209.     increases.
  210.  
  211.  
  212.  
  213.   Distributing PCBSuperScript
  214.   -----------------------------------------------------------------------------
  215.  
  216.       PCBSuperScript may be freely distributed  (subject to the for-charge
  217.     distribution restrictions detailed in the Registration section).
  218.     Therefore, please feel free to distribute copies of this program to
  219.     friends, co-workers, bulletin boards, and users' groups.  I do ask,
  220.     however, that you please distribute all of the original files and not
  221.     modified copies. Thank you in advance for your cooperation.
  222.  
  223.  
  224.   Technical Support
  225.   -----------------------------------------------------------------------------
  226.  
  227.   ┌─  Registered Users: Full technical support is available to registered
  228.   │ users of PCBSuperScript.  I have found that the most effective product
  229.   │ support can be delivered through the electronic services listed below. If
  230.   │ this option is not open to you, however, I also offer full product support
  231.   │ through the mails, or, if the problem absolutely cannot wait, the
  232.   │ telephone (no collect calls please).  I will do my best to resolve any
  233.   │ software bugs in a timely manner and I am always open to incorporating new
  234.   │ features or changes which are appropriate to the nature of the product.
  235.   │
  236.   ├─  Unregistered Users: I will attempt to respond to software trouble
  237.   │ reports made by non-registered users if the problems affect the general
  238.   │ functionality of the program.  Such users should not, however, expect
  239.   │ product support beyond initial aid to determine if the program is suitable
  240.   │ for their needs.
  241.   │
  242.   │   All Users: If you have a problem:  I ask that, before calling or
  243.   │ writing, you take the following steps:
  244.   │
  245.   │    1)  Check the manual. We all sometimes approach a piece of software
  246.   │        with preconceived ideas about how it ought to work which may not
  247.   │        correspond to how it actually does work.  (Of course, I'm
  248.   │        interested in your input if you have this sort of experience.)
  249.   │
  250.   │    2)  Have you loaded any new TSR's? Changed DOS versions? Modified any
  251.   │        system files (CONFIG.SYS or AUTOEXEC.BAT) recently? Check to make
  252.   │        sure these changes were done properly.
  253.   │
  254.   │    3)  Run a CHKDSK on your system. It's a basic thing, but we sometimes
  255.   │        forget about it (at least I do).
  256.   │
  257.   │    4)  If you're still stuck, please aquire the following information
  258.   │        and upload it to QExchange BBS:
  259.   │
  260.   │        a) Your hardware and software environment. PCBSuperScript is a very
  261.   │           versatile program and, unfortunately, one of the downsides of
  262.   │           this versatility is that settings can sometimes interact in
  263.   │           unexpected ways.  I try to test a broad range of environments
  264.   │           and settings, but obviously can't try every one.
  265.   │
  266.   │        b) The sequence of actions which lead to the error.  If I can't
  267.   │           reproduce the error, it will be very difficult to correct it, so
  268.   │           your help is vital in isolating the problem.
  269.   │
  270.   │        c) The PCBSS definition file and ALL associated files for that
  271.   │           definition file (i.e. environment settings, PORT settings,
  272.   │           etc.)
  273.   │
  274.   │           ***************************************************************
  275.   └───────   * If you do not following the above steps for reporting PCBSS *
  276.               * problems, I cannot help you. If you leave a message asking  *
  277.               * for help WITHOUT the above information, it will be IGNORED. *
  278.               *                                                             *
  279.               *   This applies to registered and unregistered users alike.  *
  280.               ***************************************************************
  281.  
  282.  
  283.       If you follow these steps, it will help me to solve your problem in a
  284.     more efficient and timely manner.
  285.  
  286.       Contact via:
  287.  
  288.         QExchange BBS
  289.           Line #1   (813)653-2937   1200-38,400 v.32/42
  290.           Line #2   (813)685-4218   1200-38,400 v.32/42
  291.  
  292.         U.S. Mail
  293.           Aquila Data Systems
  294.           304 Bayfield Drive
  295.           Brandon, FL  33511
  296.  
  297.  
  298.  
  299.   Abstract
  300.   -----------------------------------------------------------------------------
  301.  
  302.       PCBSuperScript is a script processing language designed to meet the
  303.     needs of PCBoard Sysops.  A "script file" is a standard ASCII file that
  304.     contains a list of instructions to perform (somewhat akin to a BAT file).
  305.  
  306.       Since PCBSuperScript is a script processor, some degree of planning will
  307.     be necessary. Just like you have to plan out (and test) large and advanced
  308.     BAT files, you'll have to plan out the PCBSuperScript files.
  309.  
  310.       PCBSuperScript offers control features that are similar to many
  311.     programming languages. You do not need to use all the features of
  312.     PCBSuperScript, but if you want to use it to it's fullest, some degree of
  313.     programming background will help. 'C' programmer's in particular will find
  314.     PCBSuperScript a familiar environment.
  315.  
  316.       Before you become scared away from PCBSuperScript because you don't know
  317.     programming, keep in mind that only advanced needs will require advanced
  318.     scripts. Start off simple and work up to the advanced level. If you find
  319.     the task impossible, leave me an example on my BBS and I'll try to point
  320.     you in the right direction. I won't write the script for you, but I will
  321.     advise on the method to use.
  322.  
  323.  
  324.       Some of the things you can perform with PCBSuperScript:
  325.  
  326.         o You can create your own doors, without being a programmer.
  327.  
  328.         o With PCBSuperScript, you can use a large number of testing methods,
  329.           and react to caller entry in an intelligent manner. You can ask
  330.           questions based on the result of a previous question, execute only
  331.           certain portions of a script, provide default answers to questions,
  332.           provide field formatting instructions, etc...
  333.  
  334.         o PCBSuperScript field entry can require a minimum and maximum number
  335.           of char's to be entered, allow only certain types of data to be
  336.           entered (char or numeric) and automatic formatting of phone number
  337.           type fields.
  338.  
  339.         o PCBSuperScript YOU have direct control over what, and how data is
  340.           written to the log file.
  341.  
  342.         o A PCBSuperScript script can be limited to callers with a specific
  343.           security level, and also require a password to enter it.
  344.  
  345.         o PCBSuperScript only displays what you tell it to; you don't have
  346.           to have the first six lines of anything displayed.
  347.  
  348.         o You can modify the caller security level.
  349.  
  350.         o You can place entries in the caller log.
  351.  
  352.         o You can send a message to the caller, yourself or anyone else, in
  353.           any conference.
  354.  
  355.         o Shell to any DOS program, or perform any DOS command.
  356.  
  357.  
  358.       Unlike most other data acquisition doors (i.e. registration doors),
  359.     PCBSuperScript does not bind you to one method/format of acquiring user
  360.     input, or the purpose for which it's used.
  361.  
  362.       PCBSuperScript can be used for almost anything, but I use it for the
  363.     following purposes on my BBS:
  364.  
  365.           o   New caller registration, with immediate security update's (and a
  366.               COMMENT sent to SYSOP).
  367.           o   General Q&A of the caller.
  368.           o   Accepting software bug reports.
  369.           o   Processing on-line orders.
  370.           o   Specialized file transfers.
  371.  
  372.  
  373.   Requirements
  374.   -----------------------------------------------------------------------------
  375.  
  376.       PCBSuperScript requires:
  377.  
  378.         o PCBoard version 14.5 or higher.
  379.         o 90-128k free memory, depending on size of script loaded.
  380.  
  381.  
  382.         NOTE: If you are *not* using version 14.5a of PCBoard (the current
  383.               beta release), you will need to SET a few environment variables
  384.               in your BOARD.BAT file. They are:
  385.  
  386.                 PCBDRIVE   PCBoard's home drive letter
  387.                 PCBDIR     PCBoard's home directory
  388.                 PCBDAT     name/location of PCBOARD.DAT
  389.  
  390.  
  391.             Example:
  392.  
  393.                 SET PCBDRIVE = J:
  394.                 SET PCBDIR   = \PCB
  395.                 SET PCBDAT   = J:\PCB\PCBOARD.DAT
  396.  
  397.  
  398.         NOTE: If you are using a non-standard comm port, you will need to SET
  399.               the environment variable "PCBPORT" in your BOARD.BAT file. The
  400.               format for "PCBPORT" is:
  401.  
  402.                 AAAA:I
  403.  
  404.                 where
  405.                   AAAA    Comm port address in HEX.
  406.                   I       IRQ value.
  407.  
  408.               Example:
  409.  
  410.                 SET PCBPORT = 03E8:4
  411.  
  412.  
  413.  
  414.  
  415.   Installing PCBSuperScript
  416.   -----------------------------------------------------------------------------
  417.  
  418.       Installing PCBSuperScript is as easy as copying the file SS.EXE to your
  419.     PCBoard directory. Then for each door that you wish to create, you'll need
  420.     to create the door driver and definition files.
  421.  
  422.       The door driver file is the file that PCBoard uses to execute the door.
  423.     For example, if you wanted to setup a door named "INFO", you would create
  424.     a file named "INFO" (no extension) in your PCBoard directory. The contents
  425.     of this file would look something like the following:
  426.  
  427.           @echo off
  428.           ss j:\pcb\ss\info.def
  429.           exit
  430.  
  431.       This example would load PCBSuperScript with the definition file
  432.     "J:\PCB\INFO.DEF". PCBSuperScript does not require that you supply the
  433.     drive and path to the definition file - I just always include such
  434.     information to keep confusion down to a minimum (my own).
  435.  
  436.       You will then need to use PCBSETUP to add the door to DOOR.LST
  437.     as follows:
  438.  
  439.     ┌───────────────────────────────────────────────────────────────────────┐
  440.     │                                    USER DOOR                          │
  441.     │   Filename    Password   Sec Login SYS  SYS  Shell Path to DOOR Files │
  442.     │  ══════════ ════════════ ═══ ═════ ════ ════ ═════ ═══════════════════╡
  443.     │ 1) INFO                    9   Y    Y    Y     Y   J:\PCB\SS          │
  444.     └───────────────────────────────────────────────────────────────────────┘
  445.                                                          
  446.                                                          └edit accordingly
  447.         Filename    The name of the door.
  448.         Password    Optional password for this door.
  449.         Sec         Security level needed to open this door.
  450.         Login       'Y' if this is a login door, 'N' otherwise.
  451.         USER SYS    ALWAYS set to 'Y' for PCBSuperScript doors.
  452.         DOOR SYS    ALWAYS set to 'Y' for PCBSuperScript doors.
  453.         Shell       Determines how PCBoard will shell to the door. NOTE: If
  454.                     you set this field to 'N', you *must* replace the "exit"
  455.                     verb in the door driver file with "board".
  456.         Path        Optional path to door files.
  457.  
  458.  
  459.  
  460.   Script Parsing
  461.   -----------------------------------------------------------------------------
  462.  
  463.       The command parsing of PCBSuperScript is different than what most users
  464.     are probably familiar with, but you'll soon discover that it is very easy
  465.     and powerful at the same time.
  466.  
  467.       PCBSuperScript parses the script files one word at a time. A "word" to
  468.     PCBSuperScript is any text separated by a space(s), tab character(s) or
  469.     any text enclosed by matching quotes. All spaces and tabs are removed from
  470.     between words while processing. Therefore, if you are using a parameter
  471.     that contains one or more spaces, you must enclose it in matching quotes
  472.     so that the spaces are not removed.
  473.  
  474.       It is important to understand the usage of quotes in PCBSuperScript.
  475.     Since PCBSuperScript allows "stacking" of text and variables in a script
  476.     line, there must be some way for it to discern variables from literal text.
  477.     Whenever PCBSuperScript encounters a quote (single or double), it will
  478.     search for the next matching quote. The data between the matching quotes
  479.     is then treated as one "word".
  480.  
  481.       While PCBSuperScript is processing a script line, each word is checked
  482.     against the variable table first; if a match is found, the value of the
  483.     variable is accumulated internally. If a match is not found, the word
  484.     itself is accumulated. Remember, text enclosed by matching quotes is
  485.     treated as one word; regardless of the number of spaces it contains. The
  486.     final result is a combination of all variables and literal text in the
  487.     script line.
  488.  
  489.       For example, the following commands will display different results to
  490.     the screen due to the different usage of quotes:
  491.  
  492.         COMMAND:    TEXT "Display this data to the screen"
  493.          RESULT:    Display this data to the screen
  494.  
  495.         COMMAND:    TEXT Display this data to the screen
  496.          RESULT:    Displaythisdatatothescreen
  497.          
  498.       As was noted earlier, PCBSuperScript allows "stacking" of text and
  499.     variables in a script line. The following example demonstrates this:
  500.  
  501.         COMMAND:    TEXT "Date: " @sysdate@ "   Time: " @systime@
  502.          RESULT:    Date: 06-17-91   Time: 04:28
  503.  
  504.         COMMAND:    TEXT  Date: @sysdate@    Time: @systime@
  505.          RESULT:    Date:06-17-91Time:04:28
  506.  
  507.       Again, note the usage of quotes, and the results.
  508.  
  509.  
  510.  
  511.   Tutorial
  512.   -----------------------------------------------------------------------------
  513.  
  514.       This section is a tutorial on the basic use of PCBSuperScript. It is
  515.     recommended that all users complete this section, regardless of previous
  516.     experience.
  517.  
  518.       All PCBSuperScript script files are standard ASCII text files. These
  519.     files are created and maintained in much the same manner as your
  520.     AUTOEXEC.BAT and CONFIG.SYS files are. Do NOT use MS Word, WordPerfect or
  521.     other similar word processors to create/maintain script files. A text
  522.     editor will be needed for this purpose (QEdit works nicely).
  523.  
  524.       The following sections instruct you to create, and add text to three
  525.     files: NEWCALL, NEWCALL.MSG and NEWCALL.DEF. These files are also included
  526.     with this ZIP file (in case you do not wish create and enter these files).
  527.     However, you should check these files for directory specific items, and
  528.     change accordingly.
  529.  
  530.       Also note that there are a number of sample scripts for PCBSuperScript
  531.     included ("*.DEF"). They should be printed out and studied at your
  532.     leisure.
  533.  
  534.  
  535.   Step 1:   Create the files
  536.   -----------------------------------------------------------------------------
  537.  
  538.       Create the file "NEWCALL" in your PCBoard home directory. Enter the
  539.     following into it (don't include the line numbers, or the <EOF> marker):
  540.  
  541.         1:ss newcall.def
  542.         2:exit
  543.         3:<EOF>
  544.  
  545.     Using PCBSETUP, add a door to DOOR.LST as follows:
  546.  
  547.     ┌───────────────────────────────────────────────────────────────────────┐
  548.     │                                    USER DOOR                          │
  549.     │   Filename    Password   Sec Login SYS  SYS  Shell Path to DOOR Files │
  550.     │  ══════════ ════════════ ═══ ═════ ════ ════ ═════ ═══════════════════╡
  551.     │ 1) NEWCALL                 9   Y    Y    Y     Y   J:\PCB\SS          │
  552.     └───────────────────────────────────────────────────────────────────────┘
  553.                                                          
  554.                                                          └edit accordingly
  555.  
  556.  
  557.       Create the file "NEWCALL.MSG" in your PCBoard door directory. Enter the
  558.     following into it (don't include the line numbers, or the <EOF> marker):
  559.  
  560.         1:Welcome to our system, @first@
  561.         2:<EOF>
  562.  
  563.       Create the file "NEWCALL.DEF" in your PCBoard door directory. This is
  564.     the name of the script file that we will use for this tutorial.
  565.  
  566.  
  567.  
  568.   Step 2:   Displaying information to the caller
  569.   -----------------------------------------------------------------------------
  570.  
  571.       The TEXT command is used to display data to the caller. The data
  572.     displayed may contain a variable combination of literal data, field names,
  573.     system variables and environmental variables. The combination of all data
  574.     (the final result) may not exceed 255 char's. PCBoard @X color codes are
  575.     recognized.
  576.  
  577.       The NEWLINE command is used to display one or more blank lines to the
  578.     screen. The maximum number of blank lines that may be displayed is
  579.     "limited" to 65,535.
  580.  
  581.       The INDENT command is used to position the displayed text to a specific
  582.     column.
  583.  
  584.     Add the following lines to "NEWCALL.DEF":
  585.  
  586.       NEWLINE 24
  587.       INDENT  5
  588.       TEXT  "---------------------------------------------------------------"
  589.       TEXT  "             **** QExchange Bulletin Board ****"
  590.       TEXT  "---------------------------------------------------------------"
  591.       NEWLINE 2
  592.       TEXT  "You are in the new caller login section. After completing"
  593.       TEXT  "the questions below, you will be returned to the main bulletin"
  594.       TEXT  "board."
  595.       TEXT  ""
  596.       TEXT  "This is a one-time procedure. Estimated time to complete this"
  597.       TEXT  "questionnaire is 2 to 4 minutes."
  598.       TEXT  ""
  599.       TEXT  "                  Date: " @sysdate@
  600.       TEXT  "                  Time: " @systime@
  601.       TEXT  "           Caller Name: " @user@
  602.       TEXT  "           City, State: " @city@
  603.       TEXT  "        Security Level: " @security@
  604.       TEXT  "             Baud Rate: " @bps@
  605.       TEXT  "                  Node: " @node@
  606.       TEXT  ""
  607.       TEXT  "---------------------------------------------------------------"
  608.       TEXT  ""
  609.       INDENT  0
  610.  
  611.  
  612.       Another command that is used to display data to the caller is
  613.     "DISPLAY_FILE". This command will display the contents of a file to the
  614.     screen.
  615.  
  616.     Add the following line to "NEWCALL.DEF":
  617.  
  618.       DISPLAY_FILE J:\PCB\SS\NEWCALL.MSG
  619.                    
  620.                    └edit accordingly
  621.  
  622.  
  623.  
  624.   Data Entry
  625.   -----------------------------------------------------------------------------
  626.  
  627.       Data entry is accomplished in PCBSuperScript by defining variables, then
  628.     prompting for the user entry. Variables must be defined in the script file
  629.     prior to usage (prompting), and are defined in the following manner:
  630.  
  631.           FIELDS
  632.             name    mask  type    default
  633.             .......
  634.             .......
  635.             name    mask  type    default
  636.           FIELDS
  637.  
  638.       Note the usage of the keyword "FIELDS". This keyword is used to mark the
  639.     beginning and end of a list of variables. Lines between matching "FIELDS"
  640.     keywords, are considered variable descriptor lines. The format for a
  641.     variable descriptor line is:
  642.  
  643.           name      The name of the variable. 1 to 20 char's. Case *is*
  644.                     significant.
  645.  
  646.           mask      The entry mask. The "mask" field is used to determine the
  647.                     minimum and maximum entry lengths. A "_" indicates a char
  648.                     MUST be entered at this location (a space is allowed). A
  649.                     "." indicates optional entry space.
  650.  
  651.                     For example: If you wanted to input the user's occupation,
  652.                     with at least 5 char's of entry, but no more than 25, then
  653.                     the mask would be:
  654.  
  655.                           "_____...................."
  656.  
  657.           type      The type of the field. 1 char.
  658.                     'C'   Character field. Any char can be entered.
  659.                     'N'   Numeric field. Digits only.
  660.                     'P'   Phone field. Entry in "(...)...-...." only.
  661.                     'L'   Logical field. Entry of "YNyn" only.
  662.  
  663.           default   The default value of the field (optional). This can be any
  664.                     text enclosed by matching quotes, system variables or
  665.                     environmental variables (see System Variables).
  666.  
  667.  
  668.       The following FIELDS block defines a commonly required group of
  669.     variables:
  670.  
  671.           FIELDS
  672.             Name    .........................     C     @user@
  673.             Company ___......................     C
  674.             Addr1   _____....................     C
  675.             Addr2   .........................     C
  676.             CitySt  _____....................     C     @city@
  677.             Zip     _____                         N
  678.             Country ___......................     C     "USA"
  679.             Phone   _                             P
  680.             Fax     _                             P
  681.           FIELDS
  682.  
  683.       Note the usage of "@user@" and "@city@". These are two of the available
  684.     system variables, and are used here to provide a default answer for the
  685.     appropriate fields. The "Country" field uses a literal text default value
  686.     of "USA". Also note that the two "phone" fields (type 'P'), have only one
  687.     "_". Phone entry fields do not use the field "mask" for formatting,
  688.     therefor, it is only used as a place marker (but it must be included).
  689.  
  690.       Now that the variables have been defined, you're ready to accept input
  691.     from the caller. This is accomplished with the PROMPT command, and has the
  692.     following format:
  693.  
  694.           PROMPT  prompt_msg  variable
  695.  
  696.           where:
  697.               prompt_msg      the prompt displayed to the caller
  698.               variable        the variable name used to store the caller's
  699.                               entry.
  700.  
  701.       Example:
  702.           ;
  703.           ; Field definitions
  704.           ;
  705.           FIELDS
  706.             Name    .........................     C     @user@
  707.             Company ___......................     C
  708.             Addr1   _____....................     C
  709.             Addr2   .........................     C
  710.             CitySt  _____....................     C     @city@
  711.             Zip     _____                         N
  712.             Country ___......................     C     "USA"
  713.             Phone   _                             P
  714.             Fax     _                             P
  715.           FIELDS
  716.           ;
  717.           ; Field entry
  718.           ;
  719.           PROMPT "            Name: " Name
  720.           PROMPT "         Company: " Company
  721.           PROMPT "  Address line 1: " Addr1
  722.           PROMPT "  Address line 2: " Addr2
  723.           PROMPT "     City, State: " CitySt
  724.           PROMPT "             Zip: " Zip
  725.           PROMPT "         Country: " Country
  726.           PROMPT "    Phone Number: " Phone
  727.           PROMPT "      Fax Number: " Fax
  728.           ;
  729.           ; all done...
  730.           ;
  731.           EXIT
  732.  
  733.  
  734.       The above example also uses two new items: the comment character ";",
  735.     and the "EXIT" command.
  736.  
  737.       The comment character may begin at any position on the line. Script
  738.     lines that are entirely comment lines are not loaded into memory. There are
  739.     no memory or performance penalties for using comments in your scripts.
  740.  
  741.                 NOTE: If the comment character needs to be used in a string,
  742.                       it should be enclosed between matching quotes.
  743.  
  744.  
  745.       The EXIT command signals the end of processing and is required.
  746.  
  747.  
  748.  
  749.   Logging Data
  750.   -----------------------------------------------------------------------------
  751.  
  752.       The log file is the name of the DOS file where PCBSuperScript will write
  753.     data to. The LOG_DATA statement also defines the name of the log file. If
  754.     the file currently exists, it will be appended to, otherwise, it will be
  755.     created.
  756.  
  757.       Lines between matching "LOG_DATA" keywords, are considered log file
  758.     descriptor lines. The format for a log file descriptor line is a variable
  759.     combination of literal data, field names, system variables and
  760.     environmental variables. The combination of all data (the final result)
  761.     may not exceed 255 char's.
  762.  
  763.     Add the following line to "NEWCALL.DEF":
  764.  
  765.           ;
  766.           ; Field definitions
  767.           ;
  768.           FIELDS
  769.             Name    .........................     C     @user@
  770.             Company ___......................     C
  771.             Addr1   _____....................     C
  772.             Addr2   .........................     C
  773.             CitySt  _____....................     C     @city@
  774.             Zip     _____                         N
  775.             Country ___......................     C     USA
  776.             Phone   _                             P
  777.             Fax     _                             P
  778.           FIELDS
  779.           ;
  780.           ; Field entry
  781.           ;
  782.           PROMPT "            Name: " Name
  783.           PROMPT "         Company: " Company
  784.           PROMPT "  Address line 1: " Addr1
  785.           PROMPT "  Address line 2: " Addr2
  786.           PROMPT "     City, State: " CitySt
  787.           PROMPT "             Zip: " Zip
  788.           PROMPT "         Country: " Country
  789.           PROMPT "    Phone Number: " Phone
  790.           PROMPT "      Fax Number: " Fax
  791.           ;
  792.           ; append data to log file
  793.           ;
  794.           TEXT   "Logging data. Please wait..."
  795.           LOG_DATA J:\PCB\SS\NEWCALL.LOG        ;── edit accordingly
  796.             "            Name: " Name
  797.             "         Company: " Company
  798.             "  Address line 1: " Addr1
  799.             "  Address line 2: " Addr2
  800.             "     City, State: " CitySt
  801.             "             Zip: " Zip
  802.             "         Country: " Country
  803.             "    Phone Number: " Phone
  804.             "      Fax Number: " Fax
  805.             "       Date/Time: " @sysdate@  @systime@
  806.             "  Node/Port/Baud: " @node@  @port@  @bps@
  807.           LOG_DATA
  808.           ;
  809.           ; all done...
  810.           ;
  811.           EXIT
  812.  
  813.  
  814.       The log file result of this example might look something like the
  815.     following:
  816.  
  817.                          Name: Joe Smith
  818.                       Company: Acme Steel
  819.                Address line 1: 123 Metal Lane
  820.                Address line 2:
  821.                   City, State: Iron Ore, PA
  822.                           Zip: 12345
  823.                       Country: USA
  824.                  Phone Number: (123)456-7890
  825.                    Fax Number: (000)000-0000
  826.                     Date/Time: 12/27/90    09:46:19
  827.                Node/Port/Baud: 2  1  19200
  828.  
  829.  
  830.       This completes the tutorial on the basic use of PCBSuperScript. It is
  831.     recommended that you now study the other *.DEF files included with this
  832.     ZIP file.
  833.  
  834.  
  835.   -----------------------------------------------------------------------------
  836.   Command Reference
  837.   -----------------------------------------------------------------------------
  838.  
  839.     --------------------------------------------------------------------------
  840.     ACCEPT <row> <col> <prompt> <var>
  841.     --------------------------------------------------------------------------
  842.  
  843.          Desc:  Get keyboard input from caller, at a specific row and column.
  844.  
  845.         Parms:  row       Row to start display of "prompt".
  846.                 col       Column to start display of "prompt".
  847.                 prompt    Prompt string to display.
  848.                 var       Variable to store the user input.
  849.  
  850.         Notes:  This command may only be used if the caller in is graphics
  851.                 mode.
  852.  
  853.       Example:  ACCEPT 22 1 "Enter Option " Op
  854.  
  855.  
  856.     --------------------------------------------------------------------------
  857.     ADD <var> <val1> <val2>
  858.     --------------------------------------------------------------------------
  859.  
  860.          Desc:  Add "val1" and "val2", then store the result in variable
  861.                 "var".
  862.  
  863.         Parms:  var       Variable to store result in.
  864.                 val1      First value to add
  865.                 val2      Second value to add
  866.  
  867.         Notes:  The result is treated as a 10.2 float value.
  868.  
  869.       Example:  ADD Tot Price Tax   ;Tot = Price + Tax
  870.                 ADD Tot Price 3     ;Tot = Price + 3
  871.  
  872.  
  873.     --------------------------------------------------------------------------
  874.     ADJ_EXPIRE  <count>
  875.     --------------------------------------------------------------------------
  876.  
  877.          Desc:  Sets the current callers expiration date to todays date plus
  878.                 "count" number of days.
  879.  
  880.         Parms:  count     The number of days to add to todays date.
  881.  
  882.         Notes:  "UPDATE_USER_RECORD" *must* be called to update any data to
  883.                 the callers record.
  884.  
  885.       Example:  ADJ_EXPIRE  15      ;expire date = today + 15 days
  886.                 UPDATE_USER_RECORD  ;update the user record with new data
  887.  
  888.  
  889.     --------------------------------------------------------------------------
  890.     ANS_ATTR [BRIGHT] <fcolor> [BLINK] <bcolor>
  891.     --------------------------------------------------------------------------
  892.  
  893.          Desc:  Defines the color of the user entered data in PROMPT and
  894.                 ACCEPT commands.
  895.  
  896.         Parms:  BRIGHT    Optional modifier to cause the foreground color to
  897.                           display as bright.
  898.                 fcolor    The foreground color to use.
  899.                 BLINK     Optional modifier to cause the display to blink.
  900.                 bcolor    The background color to use.
  901.  
  902.         Notes:  This command may only be used if the caller in is graphics
  903.                 mode. Valid colors are: BLACK, RED, GREEN, YELLOW, BLUE,
  904.                 MAGENTA, CYAN and WHITE.
  905.  
  906.       Example:  ANS_ATTR  BRIGHT WHITE BLACK
  907.  
  908.  
  909.     --------------------------------------------------------------------------
  910.     BEEPS <ON/OFF>
  911.     --------------------------------------------------------------------------
  912.  
  913.          Desc:  When the caller has exhausted the entry space of a field, or
  914.                 entered invalid data for the field, PCBSuperScript emits a
  915.                 "beep" to the caller. By default BEEPS is ON.
  916.  
  917.         Parms:  ON        Turn beeps on (default).
  918.                 OFF       Turn beeps off
  919.  
  920.         Notes:  None.
  921.  
  922.       Example:  BEEPS ON                    ;turn beeps on
  923.  
  924.  
  925.     --------------------------------------------------------------------------
  926.     CLEARCRT
  927.     --------------------------------------------------------------------------
  928.  
  929.          Desc:  Clears the screen.
  930.  
  931.         Parms:  None.
  932.  
  933.         Notes:  This command may only be used if the caller in is graphics
  934.                 mode.
  935.  
  936.       Example:  CLEARCRT
  937.  
  938.  
  939.     --------------------------------------------------------------------------
  940.     CLEARLINES <row1> <row2>
  941.     --------------------------------------------------------------------------
  942.  
  943.          Desc:  Clear a specified block of rows on the screen.
  944.  
  945.         Parms:  row1      First row to clear
  946.                 row2      Last row to clear
  947.  
  948.         Notes:  This command may only be used if the caller in is graphics
  949.                 mode.
  950.  
  951.       Example:  CLEARLINES 5 17      ;clear lines 5 - 17
  952.  
  953.  
  954.     --------------------------------------------------------------------------
  955.     CLOSEFILE <lun>
  956.     --------------------------------------------------------------------------
  957.  
  958.          Desc:  CLOSEFILE closes the specified 'lun' and flushes data buffers
  959.                 associated with it.
  960.  
  961.         Parms:  lun       This is the Logical Unit Number ("LUN"), and must be
  962.                           a number from 0 to 9.
  963.  
  964.         Notes:  A LUN that has not been opened may safely be closed.
  965.  
  966.                 The macro "@file_stat@" contains the result of the last data
  967.                 file operation performed by PCBSuperScript. All data file
  968.                 functions load this macro with "*OK*" if no error occurred.
  969.                 This macro should be checked after a data file function to
  970.                 insure proper script operation. See ORDER.DEF for examples of
  971.                 these commands.
  972.  
  973.       Example:  OPENFILE  0 J:\PCB\SS\DATA.DAT
  974.                 READFILE  0 DatFmt
  975.                 CLOSEFILE 0
  976.         
  977.  
  978.     --------------------------------------------------------------------------
  979.     COLOR [BRIGHT] <fcolor> [BLINK] <bcolor>
  980.     --------------------------------------------------------------------------
  981.  
  982.          Desc:  Sets the display color.
  983.  
  984.         Parms:  BRIGHT    Optional modifier to cause the foreground color to
  985.                           display as bright.
  986.                 fcolor    The foreground color to use.
  987.                 BLINK     Optional modifier to cause the display to blink.
  988.                 bcolor    The background color to use.
  989.  
  990.         Notes:  This command may only be used if the caller in is graphics
  991.                 mode. Valid colors are: BLACK, RED, GREEN, YELLOW, BLUE,
  992.                 MAGENTA, CYAN and WHITE.
  993.  
  994.       Example:  COLOR  BRIGHT CYAN BLACK
  995.  
  996.  
  997.     --------------------------------------------------------------------------
  998.     DECREASE <dec> <min>
  999.     --------------------------------------------------------------------------
  1000.  
  1001.          Desc:  Decrease caller security level by 'dec', but do not allow to
  1002.                 be less than 'min'.
  1003.  
  1004.         Parms:  dec       Decrement amount.
  1005.                 min       Minimum allowed value of security level
  1006.  
  1007.         Notes:  A modified security level is not written back to the user file
  1008.                 until the UPDATE_USER_RECORD command is executed.
  1009.  
  1010.       Example:  DECREASE 1 10
  1011.  
  1012.  
  1013.     --------------------------------------------------------------------------
  1014.     DEC <var>
  1015.     --------------------------------------------------------------------------
  1016.  
  1017.          Desc:  Decrement the specified variable by 1.
  1018.  
  1019.         Parms:  var       The variable to decrement.
  1020.  
  1021.         Notes:  none
  1022.  
  1023.       Example:  DEC Row              ;decrement variable "Row" by 1.
  1024.  
  1025.  
  1026.     --------------------------------------------------------------------------
  1027.     DELAY <x>
  1028.     --------------------------------------------------------------------------
  1029.  
  1030.          Desc:  Pause script execution for "x" seconds.
  1031.  
  1032.         Parms:  x         The number of seconds to pause.
  1033.  
  1034.         Notes:  none
  1035.  
  1036.       Example:  DELAY 5              ;pause script for 5 seconds
  1037.  
  1038.  
  1039.     --------------------------------------------------------------------------
  1040.     DISPLAY <row> <col> <..data..>
  1041.     --------------------------------------------------------------------------
  1042.  
  1043.          Desc:  Display the specified data at a specified row and column.
  1044.  
  1045.         Parms:  row       Row to start display of "..data..".
  1046.                 col       Column to start display of "..data".
  1047.                 ..data..  The data to display.
  1048.  
  1049.         Notes:  This command may only be used if the caller in is graphics
  1050.                 mode.
  1051.  
  1052.       Example:  DISPLAY 5 15 "This is your name: " @user@
  1053.  
  1054.  
  1055.     --------------------------------------------------------------------------
  1056.     DISPLAYC <row> <..data..>
  1057.     --------------------------------------------------------------------------
  1058.  
  1059.          Desc:  Display the specified data centered on a specified row.
  1060.  
  1061.         Parms:  row       Row to start display of "..data..".
  1062.                 ..data..  The data to display.
  1063.  
  1064.         Notes:  This command may only be used if the caller in is graphics
  1065.                 mode.
  1066.  
  1067.       Example:  DISPLAYC 5 "This is some centered data"
  1068.  
  1069.  
  1070.     --------------------------------------------------------------------------
  1071.     DIV <var> <val1> <val2>
  1072.     --------------------------------------------------------------------------
  1073.  
  1074.          Desc:  Divide "val1" by "val2", then store the result in variable
  1075.                 "result_var".
  1076.  
  1077.         Parms:  var       Variable to store result in.
  1078.                 val1      Dividend
  1079.                 val2      Divisor
  1080.  
  1081.         Notes:  The result is treated as a 10.2 float value.
  1082.  
  1083.       Example:  DIV Temp Tot / Qty  ;Temp = Tot / Qty
  1084.                 DIV Tot Price 3     ;Tot = Price / 3
  1085.  
  1086.  
  1087.     --------------------------------------------------------------------------
  1088.     ESET <evar> <val>
  1089.     --------------------------------------------------------------------------
  1090.  
  1091.          Desc:  Set's the environment variable "evar" to "val".
  1092.  
  1093.         Parms:  evar      The name of the environment variable to set.
  1094.  
  1095.         Notes:  none
  1096.  
  1097.       Example:  ESET DSZLOG "J:\PCB\DSZLOG" @node@ ".LOG"
  1098.  
  1099.  
  1100.     --------------------------------------------------------------------------
  1101.     FIELDS
  1102.       <name> <mask> <type> <default>
  1103.       .......
  1104.     FIELDS
  1105.     --------------------------------------------------------------------------
  1106.  
  1107.          Desc:  Defines variables to be used in the script.
  1108.  
  1109.         Parms:  name      The name of the variable. 1 to 20 char's. Case *is*
  1110.                           significant.
  1111.  
  1112.                 mask      The entry mask. The "mask" field is used to
  1113.                           determine the minimum and maximum entry lengths. A
  1114.                           "_" indicates a char MUST be entered at this
  1115.                           location (a space is allowed). A "." indicates
  1116.                           optional entry space.
  1117.  
  1118.                           For example: If you wanted to input the user's
  1119.                           occupation, with at least 5 char's of entry, but no
  1120.                           more than 25, then the mask would be:
  1121.  
  1122.                                 "_____...................."
  1123.  
  1124.  
  1125.                 type      The type of the field. 1 char.
  1126.                           'C'   Character field. Any char can be entered.
  1127.                           'N'   Numeric field. Digits only.
  1128.                           'P'   Phone field. Entry in "(...)...-...." only.
  1129.                           'L'   Logical field. Entry of "YNyn" only.
  1130.  
  1131.                 default   The default value of the field (optional). This can
  1132.                           be any text enclosed by matching quotes, system
  1133.                           variables or environmental variables (see System
  1134.                           Variables).
  1135.  
  1136.         Notes:  none
  1137.  
  1138.       Example:  FIELDS
  1139.                   Name    .........................     C     @user@
  1140.                   Company ___......................     C
  1141.                   Addr1   _____....................     C
  1142.                   Addr2   .........................     C
  1143.                   CitySt  _____....................     C     @city@
  1144.                   Zip     _____                         N
  1145.                   Country ___......................     C     "USA"
  1146.                   Phone   _                             P
  1147.                   Fax     _                             P
  1148.                 FIELDS
  1149.  
  1150.  
  1151.     --------------------------------------------------------------------------
  1152.     FLUSH_KB
  1153.     --------------------------------------------------------------------------
  1154.  
  1155.          Desc:  Discard any characters remaining in the keyboard buffer.
  1156.  
  1157.         Parms:  None.
  1158.  
  1159.         Notes:  none.
  1160.  
  1161.       Example:  FLUSH_KB
  1162.  
  1163.  
  1164.     --------------------------------------------------------------------------
  1165.     FORCE_ENTER
  1166.     --------------------------------------------------------------------------
  1167.  
  1168.          Desc:  Displays a "Press Enter to continue..." prompt, and waits for
  1169.                 the caller to press ENTER.
  1170.  
  1171.         Parms:  none.
  1172.  
  1173.         Notes:  none.
  1174.  
  1175.       Example:  FORCE_ENTER
  1176.  
  1177.  
  1178.     --------------------------------------------------------------------------
  1179.     FORMAT <name>
  1180.       <var>
  1181.       ...
  1182.     FORMAT
  1183.     --------------------------------------------------------------------------
  1184.  
  1185.          Desc:  Defines a format to use with READFILE or WRITEFILE.
  1186.  
  1187.         Parms:  var       Variable to load/write with READFILE/WRITEFILE.
  1188.  
  1189.         Notes:  none.
  1190.  
  1191.       Example:  FIELDS
  1192.                   Name    .........................     C     @user@
  1193.                   Company ___......................     C
  1194.                   Addr1   _____....................     C
  1195.                   Addr2   .........................     C
  1196.                   CitySt  _____....................     C     @city@
  1197.                   Zip     _____                         N
  1198.                   Country ___......................     C     "USA"
  1199.                   Phone   _                             P
  1200.                   Fax     _                             P
  1201.                 FIELDS
  1202.                 ;
  1203.                 FORMAT DatFmt
  1204.                   Name
  1205.                   Company
  1206.                   Addr1
  1207.                   Addr2
  1208.                   CitySt
  1209.                   Zip
  1210.                   Country
  1211.                   Phone
  1212.                   Fax
  1213.                 FORMAT
  1214.  
  1215.  
  1216.     --------------------------------------------------------------------------
  1217.     GETWORD <var>
  1218.     --------------------------------------------------------------------------
  1219.  
  1220.          Desc:  Gets the next word from "string" (referred to by the previous
  1221.                 PARSE command). If the end of line is reached, "var" will be
  1222.                 set to the value "*EOL*".
  1223.  
  1224.         Parms:  var       variable to store result in.
  1225.  
  1226.         Notes:  The commands "PARSE" and "GETWORD" allow scripts to parse data
  1227.                 fields or environment variables into individual words. To use
  1228.                 these commands, "PARSE" *MUST* be called FIRST to setup
  1229.                 subsequent calls to "GETWORD".
  1230.  
  1231.       Example:  ......
  1232.                 ......
  1233.                 PARSE @%PCBDOOR
  1234.                 GETWORD Option
  1235.                 IF Option == "*EOL*"
  1236.                   GOTO BadCmd
  1237.                 ENDIF
  1238.                 GETWORD FileName
  1239.                 IF FileName == "*EOL*"
  1240.                   GOTO BadCmd
  1241.                 ENDIF
  1242.                 ......
  1243.                 ......
  1244.  
  1245.  
  1246.     --------------------------------------------------------------------------
  1247.     GOTO <label> [TOP]
  1248.     --------------------------------------------------------------------------
  1249.  
  1250.          Desc:  Transfer control to the specified "label". The "label"
  1251.                 referenced by the GOTO command must exist in the script file.
  1252.                 Unlike DOS BAT files, the label that is referenced by the GOTO
  1253.                 command may be a variable.
  1254.  
  1255.         Parms:  label     the label to transfer execution to
  1256.                 TOP       Optional suffix (see Notes).
  1257.  
  1258.         Notes:  When the GOTO command is executed, searching for the label
  1259.                 begins at the current location in the script file, progressing
  1260.                 to the end of file. If the end of file is encountered before
  1261.                 the label is found, searching is "wrapped" around to the top
  1262.                 of the script file and continues in a downward progression. If
  1263.                 the label is not found by the time it reaches the original
  1264.                 search position in the script file, the label is declared
  1265.                 undefined and execution of the script halts.
  1266.  
  1267.                 Keeping in mind the process of searching for a label, it may
  1268.                 be advantageous to instruct the GOTO command to start at the
  1269.                 top of the script in the search if the label is known to be
  1270.                 above the current location in the script file. This is
  1271.                 accomplished with the TOP suffix.
  1272.  
  1273.       Example:  ...
  1274.                 ...
  1275.                 :There
  1276.                   ....
  1277.                   ....
  1278.                   ....
  1279.                   GOTO There TOP
  1280.                 ...
  1281.                 ...
  1282.  
  1283.  
  1284.     --------------------------------------------------------------------------
  1285.     GOTORC <row> <col>
  1286.     --------------------------------------------------------------------------
  1287.  
  1288.          Desc:  Positions the cursor to "row" and "col".
  1289.  
  1290.         Parms:  row       1 based row value
  1291.                 col       1 based column value
  1292.  
  1293.         Notes:  This command may only be used if the caller in is graphics
  1294.                 mode.
  1295.  
  1296.       Example:  GOTORC 1 1
  1297.  
  1298.  
  1299.     --------------------------------------------------------------------------
  1300.     IF <val1> [<test> <val2>]
  1301.       <stmnts>
  1302.     [ELSE
  1303.       <stmnts>]
  1304.     ENDIF
  1305.     --------------------------------------------------------------------------
  1306.  
  1307.          Desc:  Allow selective execution of script statements based on
  1308.                 variable values. The IF/ELSE/ENDIF clause is used as in most
  1309.                 any other language. Note that the ENDIF statement MUST be
  1310.                 used.
  1311.  
  1312.                 If only one field is used in the IF statement, it is simply
  1313.                 tested for NULL. For example:
  1314.  
  1315.                   IF Name
  1316.                     ...
  1317.                   ENDIF
  1318.  
  1319.                 Is the same as:
  1320.  
  1321.                   IF Name != ""
  1322.                     ...
  1323.                   ENDIF
  1324.  
  1325.                 If the ELSE statement is included, statements between it and
  1326.                 the matching ENDIF statement are executed if the previous IF
  1327.                 statement fails.
  1328.  
  1329.         Parms:  val1      The first of two values to test.
  1330.                 test      The test to perform. Valid test operators are:
  1331.                             ==    equal
  1332.                             !=    not equal
  1333.                             >     greater than
  1334.                             >=    greater than, or equal
  1335.                             <     less than
  1336.                             <=    less than, or equal
  1337.                             ?     if val1 is in val2
  1338.                             !?    if val1 is not in val2
  1339.  
  1340.                 val2      The second of two values to test.
  1341.                 stmnts    Any number of valid statements.
  1342.  
  1343.         Notes:  The IF/ELSE/ENDIF clause may be nested to any level.
  1344.  
  1345.  
  1346.     --------------------------------------------------------------------------
  1347.     INCREASE <inc> <max>
  1348.     --------------------------------------------------------------------------
  1349.  
  1350.          Desc:  Increase sec level by 'inc', but do not allow to be more than
  1351.                 'max'.
  1352.  
  1353.         Parms:  inc       increment amount.
  1354.                 max       maximum allowed value of security level
  1355.  
  1356.         Notes:  A modified security level is not written back to the user file
  1357.                 until the UPDATE_USER_RECORD command is executed.
  1358.  
  1359.       Example:  INCREASE 1 10
  1360.  
  1361.  
  1362.     --------------------------------------------------------------------------
  1363.     INC <var>
  1364.     --------------------------------------------------------------------------
  1365.  
  1366.          Desc:  Increment the specified variable by 1.
  1367.  
  1368.         Parms:  var       the variable to decrement.
  1369.  
  1370.         Notes:  none
  1371.  
  1372.       Example:  INC Row              ;increment variable "Row" by 1.
  1373.  
  1374.  
  1375.     --------------------------------------------------------------------------
  1376.     INCLUDE <file>
  1377.     --------------------------------------------------------------------------
  1378.  
  1379.          Desc:  Reads a specified file into the current script, at the
  1380.                 location of the "INCLUDE" command. 
  1381.  
  1382.         Parms:  file      The file name to include.
  1383.  
  1384.         Notes:  "INCLUDE" statements may be nested to a level of 10.
  1385.  
  1386.       Example:  INCLUDE "J:\PCB\SS\DEF.INC"
  1387.  
  1388.  
  1389.     --------------------------------------------------------------------------
  1390.     LCASE <var>
  1391.     --------------------------------------------------------------------------
  1392.  
  1393.          Desc:  Converts all characters in "var" to lower case.
  1394.  
  1395.         Parms:  var       The variable to modify.
  1396.  
  1397.         Notes:  none
  1398.  
  1399.       Example:  LCASE Occupation
  1400.  
  1401.  
  1402.     --------------------------------------------------------------------------
  1403.     LOG_DATA <file>
  1404.       <..data..>
  1405.       ...
  1406.     LOG_DATA
  1407.     --------------------------------------------------------------------------
  1408.  
  1409.          Desc:  Define what and where PCBSuperScript will log data to. If the
  1410.                 file currently exists, it will be appended to, otherwise it
  1411.                 will be created.
  1412.  
  1413.         Parms:  file      The log file name.
  1414.                 ..data..  The data to write to the log file.
  1415.  
  1416.         Notes:  Lines between matching "LOG_DATA" keywords, are considered log
  1417.                 file descriptor lines. The format for a log file descriptor
  1418.                 line is a variable combination of literal data, field names,
  1419.                 system variables and environmental variables. The combination
  1420.                 of all data (the final result) may not exceed 255 char's.
  1421.  
  1422.       Example:  LOG_DATA J:\PCB\SS\NEWCALL.LOG
  1423.                   "            Name: " Name
  1424.                   "         Company: " Company
  1425.                   "  Address line 1: " Addr1
  1426.                   "  Address line 2: " Addr2
  1427.                   "     City, State: " CitySt
  1428.                   "             Zip: " Zip
  1429.                   "         Country: " Country
  1430.                   "    Phone Number: " Phone
  1431.                   "      Fax Number: " Fax
  1432.                   "       Date/Time: " @sysdate@  @systime@
  1433.                   "  Node/Port/Baud: " @node@  @port@  @bps@
  1434.                 LOG_DATA
  1435.  
  1436.  
  1437.     --------------------------------------------------------------------------
  1438.     LOGMSG <msg>
  1439.     --------------------------------------------------------------------------
  1440.  
  1441.          Desc:  Writes "msg" to the caller log file for this node.
  1442.  
  1443.         Parms:  msg       The message to write.
  1444.  
  1445.         Notes:  none
  1446.  
  1447.       Example:  LOGMSG @user@ " accessed this door"
  1448.  
  1449.  
  1450.     --------------------------------------------------------------------------
  1451.     MAX_ATTR [BRIGHT] <fcolor> [BLINK] <bcolor>
  1452.     --------------------------------------------------------------------------
  1453.  
  1454.          Desc:  Defines the color of the "maximum" field character in PROMPT
  1455.                 and ACCEPT commands.
  1456.  
  1457.         Parms:  BRIGHT    optional modifier to cause the foreground color to
  1458.                           display as bright.
  1459.                 fcolor    the foreground color to use.
  1460.                 BLINK     optional modifier to cause the display to blink.
  1461.                 bcolor    the background color to use.
  1462.  
  1463.         Notes:  This command may only be used if the caller in is graphics
  1464.                 mode. Valid colors are: BLACK, RED, GREEN, YELLOW, BLUE,
  1465.                 MAGENTA, CYAN and WHITE.
  1466.  
  1467.       Example:  MAX_ATTR  BLUE BLACK
  1468.  
  1469.  
  1470.     --------------------------------------------------------------------------
  1471.     MAX_CHAR <char>
  1472.     --------------------------------------------------------------------------
  1473.  
  1474.          Desc:  Defines the character used to signify the maximum number of
  1475.                 characters to be entered in PROMPT and ACCEPT commands. The
  1476.                 default is a period ('.').
  1477.  
  1478.         Parms:  char      The new character to use.
  1479.  
  1480.         Notes:  none
  1481.  
  1482.       Example:  MAX_CHAR "\xFA"
  1483.  
  1484.  
  1485.     --------------------------------------------------------------------------
  1486.     MIN_ATTR [BRIGHT] <fcolor> [BLINK] <bcolor>
  1487.     --------------------------------------------------------------------------
  1488.  
  1489.          Desc:  Defines the color of the "minimum" field character in PROMPT
  1490.                 and ACCEPT commands.
  1491.  
  1492.         Parms:  BRIGHT    optional modifier to cause the foreground color to
  1493.                           display as bright.
  1494.                 fcolor    the foreground color to use.
  1495.                 BLINK     optional modifier to cause the display to blink.
  1496.                 bcolor    the background color to use.
  1497.  
  1498.         Notes:  This command may only be used if the caller in is graphics
  1499.                 mode. Valid colors are: BLACK, RED, GREEN, YELLOW, BLUE,
  1500.                 MAGENTA, CYAN and WHITE.
  1501.  
  1502.       Example:  MIN_ATTR  RED BLACK
  1503.  
  1504.  
  1505.     --------------------------------------------------------------------------
  1506.     MIN_CHAR <char>
  1507.     --------------------------------------------------------------------------
  1508.  
  1509.          Desc:  Defines the character used to signify the minimum number of
  1510.                 characters to be entered in PROMPT and ACCEPT commands. The
  1511.                 default is an underscore ('_').
  1512.  
  1513.         Parms:  char      The new character to use.
  1514.  
  1515.         Notes:  none
  1516.  
  1517.       Example:  MIN_CHAR "\xC4"
  1518.  
  1519.  
  1520.     --------------------------------------------------------------------------
  1521.     MSG
  1522.       <to>
  1523.       <from>
  1524.       <subject>
  1525.       <security>
  1526.       <conf>
  1527.       ...message data...
  1528.       ...
  1529.     MSG
  1530.     --------------------------------------------------------------------------
  1531.  
  1532.          Desc:  The "MSG" command adds a message to a specified message base.
  1533.  
  1534.         Parms:  to        The name of the person this message is being sent
  1535.                           to. This can be a literal value, a system variable
  1536.                           (i.e. @user@) or a variable currently defined in the
  1537.                           script.
  1538.  
  1539.                 from      The name of the person this message is from. This
  1540.                           can be a literal value, a system variable (i.e.
  1541.                           @user@) or a variable currently defined in the
  1542.                           script.
  1543.  
  1544.                 subject   The subject of this message. This can be a literal
  1545.                           value or a variable currently defined in the script.
  1546.  
  1547.                 security  The security of this message. Valid choices are
  1548.                           "Private", Comment" and "Public" (case is not
  1549.                           significant). This can be a literal value or a
  1550.                           variable currently defined in the script.
  1551.  
  1552.                 conf      The conference to place the message in. This can be
  1553.                           a literal value or a variable currently defined in
  1554.                           the script. Note that the spelling *and* case of the
  1555.                           conference name *MUST* be exact.
  1556.  
  1557.                 msg data  The text body of the message. Up to 99 lines will be
  1558.                           processed. This can be any combination of literal
  1559.                           data, system variables and currently defined script
  1560.                           variables.
  1561.  
  1562.       Example:  ;
  1563.                 ;send comment to sysop
  1564.                 ;
  1565.                 MSG
  1566.                   SYSOP                   ;to
  1567.                   SYSOP                   ;from
  1568.                   "New User Called"       ;subj
  1569.                   Comment                 ;sec
  1570.                   "Main Board"            ;conf
  1571.                   "A new user named " @user@ " has called the system."
  1572.                   "The date and time was " @sysdate@ " : " @systime@ "."
  1573.                   "They are from " @city@ "
  1574.                   "Their phone is " Phone
  1575.                   "Their occupation is " Occup "
  1576.                   "They are " Age " years old."
  1577.                   ""
  1578.                   "Node: " @node@ "  Baud Rate: " @bps@
  1579.                 MSG
  1580.                 ;
  1581.                 ;send private msg to the new caller
  1582.                 ;
  1583.                 MSG
  1584.                   @user@                  ;to
  1585.                   SYSOP                   ;from
  1586.                   "Welcome!"              ;subj
  1587.                   Private                 ;sec
  1588.                   "Main Board"            ;conf
  1589.                   "Welcome to our BBS! This is your first message here!"
  1590.                 MSG
  1591.  
  1592.  
  1593.     --------------------------------------------------------------------------
  1594.     MUL <var> <val1> <val2>
  1595.     --------------------------------------------------------------------------
  1596.  
  1597.          Desc:  Multiply "val1" and "val2", then store the result in variable
  1598.                 "var".
  1599.  
  1600.         Parms:  var       variable to store result in.
  1601.                 val1      value 1 to multiply
  1602.                 val2      value 2 to multiply
  1603.  
  1604.         Notes:  The result is treated as a 10.2 float value.
  1605.  
  1606.       Example:  MUL Tot Qty Price   ;Tot = Qty * Price
  1607.                 MUL Tot Price 3     ;Tot = Price * 3
  1608.  
  1609.  
  1610.     --------------------------------------------------------------------------
  1611.     NULL_ENTRY  <label>
  1612.     --------------------------------------------------------------------------
  1613.  
  1614.          Desc:  If the last performed PROMPT entry resulted in a null entry,
  1615.                 processing will branch to "label".
  1616.  
  1617.         Parms:  label     the label to transfer execution to
  1618.  
  1619.         Notes:  none
  1620.  
  1621.       Example:  PROMPT "            Name: " Name
  1622.                 NULL_ENTRY  AbortJob
  1623.  
  1624.  
  1625.     --------------------------------------------------------------------------
  1626.     OPENFILE  <lun> <file>
  1627.     --------------------------------------------------------------------------
  1628.  
  1629.          Desc:  OPENFILE prepares a script for data file access. Up to 10
  1630.                 files may be open at the same time, using Logical Unit Numbers
  1631.                 (LUN's) from 0 to 9. If the specified LUN is already in use by
  1632.                 a previous call to OPENFILE, it is first closed.
  1633.  
  1634.         Parms:  lun       This is the Logical Unit Number, and must be a
  1635.                           number from 0 to 9.
  1636.                 file      The name of the file.
  1637.  
  1638.         Notes:  If the LUN is already open, it is first closed.
  1639.  
  1640.                 The macro "@file_stat@" contains the result of the last data
  1641.                 file operation performed by PCBSuperScript. All data file
  1642.                 functions load this macro with "*OK*" if no error occurred.
  1643.                 This macro should be checked after a data file function to
  1644.                 insure proper script operation. See ORDER.DEF for examples of
  1645.                 these commands.
  1646.  
  1647.                 Also see "FORMAT".
  1648.  
  1649.       Example:  OPENFILE  0 J:\PCB\SS\DATA.DAT
  1650.                 READFILE  0 DatFmt
  1651.                 CLOSEFILE 0
  1652.  
  1653.  
  1654.     --------------------------------------------------------------------------
  1655.     PARSE <string>
  1656.     --------------------------------------------------------------------------
  1657.  
  1658.          Desc:  Prepares "string" for call to the command GETWORD.
  1659.  
  1660.         Parms:  string    The string to parse
  1661.  
  1662.         Notes:  The commands "PARSE" and "GETWORD" allow scripts to parse data
  1663.                 fields or environment variables into individual words. To use
  1664.                 these commands, "PARSE" *MUST* be called FIRST to setup
  1665.                 subsequent calls to "GETWORD".
  1666.  
  1667.       Example:  ......
  1668.                 ......
  1669.                 PARSE @%PCBDOOR
  1670.                 GETWORD Option
  1671.                 IF Option == "*EOL*"
  1672.                   GOTO BadCmd
  1673.                 ENDIF
  1674.                 GETWORD FileName
  1675.                 IF FileName == "*EOL*"
  1676.                   GOTO BadCmd
  1677.                 ENDIF
  1678.                 ......
  1679.                 ......
  1680.  
  1681.  
  1682.     --------------------------------------------------------------------------
  1683.     PROMPT <prompt> <var>
  1684.     --------------------------------------------------------------------------
  1685.  
  1686.          Desc:  Get keyboard input from caller.
  1687.  
  1688.         Parms:  prompt    The prompt displayed to the caller.
  1689.                 var       The variable name used to store the caller's entry.
  1690.  
  1691.         Notes:  none.
  1692.  
  1693.       Example:  PROMPT "            Name: " Name
  1694.  
  1695.  
  1696.     --------------------------------------------------------------------------
  1697.     RANDOM_STR <count> <var>
  1698.     --------------------------------------------------------------------------
  1699.  
  1700.          Desc:  Generate a string of "count" characters, and store the
  1701.                 result in variable "string"
  1702.  
  1703.         Parms:  count     The number of random characters to generate. If
  1704.                           this value is 0, the generated string will be
  1705.                           equal to the size of the variable "string".
  1706.                 string    Variable to store the result in.
  1707.  
  1708.         Notes:  The generated string will contain alpha numeric characters
  1709.                 only.
  1710.  
  1711.       Example:  RANDOM_STR 0 random_str
  1712.  
  1713.  
  1714.     --------------------------------------------------------------------------
  1715.     READFILE  <lun> <format> [key]
  1716.     --------------------------------------------------------------------------
  1717.  
  1718.          Desc:  READFILE reads a data record from the file specified by 'lun',
  1719.                 into the variables contained in 'format'.
  1720.  
  1721.         Parms:  lun       This is the Logical Unit Number, and must be a
  1722.                           number from 0 to 9.
  1723.                 format    The name of the FORMAT for this file.
  1724.                 key       The optional key value to use for reads to this
  1725.                           file.
  1726.  
  1727.         Notes:  If a 'key' is supplied, the first field of each record in the
  1728.                 data file is compared to the specified 'key'. If the 'key' is
  1729.                 found, the record is read into memory. If it is not found, the
  1730.                 macro "@file_stat@" is set to the value "*KNF*" (Key Not
  1731.                 Found).
  1732.  
  1733.                 If a 'key' is not specified, the next sequential record is
  1734.                 read into memory. If the end of file is reached, the macro
  1735.                 "@file_stat@" is set to the value "*EOF*" (End Of File).
  1736.  
  1737.                 The macro "@file_stat@" contains the result of the last data
  1738.                 file operation performed by PCBSuperScript. All data file
  1739.                 functions load this macro with "*OK*" if no error occurred.
  1740.                 This macro should be checked after a data file function to
  1741.                 insure proper script operation. See ORDER.DEF for examples of
  1742.                 these commands.
  1743.  
  1744.                 Also see "FORMAT".
  1745.  
  1746.       Example:  OPENFILE  0 J:\PCB\SS\DATA.DAT
  1747.                 READFILE  0 DatFmt
  1748.                 CLOSEFILE 0
  1749.  
  1750.  
  1751.     --------------------------------------------------------------------------
  1752.     REPEAT <row> <col> <char> <cnt>
  1753.     --------------------------------------------------------------------------
  1754.  
  1755.          Desc:  Display a specified character a specified number of times, at
  1756.                 a specified row and col.
  1757.  
  1758.         Parms:  row       row to start display of "prompt".
  1759.                 col       column to start display of "prompt".
  1760.                 char      The character to display
  1761.                 cnt       The number of characters to display
  1762.  
  1763.         Notes:  This command may only be used if the caller in is graphics
  1764.                 mode.
  1765.  
  1766.       Example:  REPEAT 5 15 "─" 30
  1767.  
  1768.  
  1769.     --------------------------------------------------------------------------
  1770.     SEC_LOOKUP  <file>
  1771.     --------------------------------------------------------------------------
  1772.  
  1773.          Desc:  Searches the specified file for the user name. If it is found,
  1774.                 the security level specified in the look-up file is used. This
  1775.                 could be used in a new callers script, with the names of
  1776.                 friends (or customers, or etc..) in the look-up file. Note
  1777.                 that a modified security level is not written back to the user
  1778.                 file until the UPDATE_USER_RECORD command is executed.
  1779.  
  1780.                 The format of the look-up file is as follows:
  1781.  
  1782.                   name, level
  1783.  
  1784.         Parms:  file      The file name to search.
  1785.  
  1786.         Notes:  A modified security level is not written back to the user file
  1787.                 until the UPDATE_USER_RECORD command is executed.
  1788.  
  1789.       Example:  look-up file contents:
  1790.  
  1791.                   ABDUL RASHEEDI, 50
  1792.                   RICHARD MORTON, 50
  1793.                   SHELDON GIBBS, 50
  1794.                   CRAIG FILLION, 50
  1795.                   MIKE SAUNDERS, 50
  1796.  
  1797.                 These people would be given a security level of 50.
  1798.  
  1799.  
  1800.     --------------------------------------------------------------------------
  1801.     SEC_TABLE
  1802.       <val1> <val2>
  1803.       [<val1> <val2>]
  1804.       ...
  1805.     SEC_TABLE
  1806.     --------------------------------------------------------------------------
  1807.  
  1808.          Desc:  Change one specific level to another level. Any number of
  1809.                 levels may be tested. When a match is made, the table is
  1810.                 exited. Note that a modified security level is not written
  1811.                 back to the user file until the UPDATE_USER_RECORD command is
  1812.                 executed.
  1813.  
  1814.         Parms:  val1      Test security level
  1815.                 val2      New security level, if current = val1
  1816.  
  1817.         Notes:  A modified security level is not written back to the user file
  1818.                 until the UPDATE_USER_RECORD command is executed.
  1819.  
  1820.       Example:  SEC_TABLE       ;Security Table Start
  1821.                    9  10        ; users at sec level 9 goto 10
  1822.                   10  20        ; users at sec level 10 goto 20
  1823.                   20  30        ; users at sec level 20 goto 30
  1824.                 SEC_TABLE       ;Security Table End
  1825.  
  1826.  
  1827.     --------------------------------------------------------------------------
  1828.     SET <var> <val>
  1829.     --------------------------------------------------------------------------
  1830.  
  1831.          Desc:  Initialize (or modify) the current value of a variable. The
  1832.                 "val" may contain a variable combination of literal data,
  1833.                 field names, system variables and environmental variables. The
  1834.                 combination of all data (the final result) may not exceed 255
  1835.                 char's.
  1836.  
  1837.         Parms:  var       The variable to modify.
  1838.                 val       The value to store into "var".
  1839.  
  1840.         Notes:  none
  1841.  
  1842.       Example:  SET Row 1
  1843.  
  1844.  
  1845.     --------------------------------------------------------------------------
  1846.     SHELL <str>
  1847.     --------------------------------------------------------------------------
  1848.  
  1849.          Desc:  Shells to DOS and performs the command "str". The command may
  1850.                 be any combination of literal data, system variables and
  1851.                 currently defined script variables.
  1852.  
  1853.         Parms:  str       The DOS command to execute
  1854.  
  1855.         Notes:  The macro "@shell_stat@" is loaded with the ERRORLEVEL of the
  1856.                 SHELL command on return.
  1857.  
  1858.       Example:  SET DszCmd "j:\pcb\DSZ.com port " @port@
  1859.                 SET DszCmd DszCmd " ha bo z rz -mrr " Directory
  1860.                 SHELL DszCmd
  1861.  
  1862.  
  1863.     --------------------------------------------------------------------------
  1864.     SUB <var> <val1> <val2>
  1865.     --------------------------------------------------------------------------
  1866.  
  1867.          Desc:  Subtract "val2" from "val1", then store the result in variable
  1868.                 "var".
  1869.  
  1870.         Parms:  var       variable to store result in.
  1871.                 val1      Value to be subtracted from.
  1872.                 val2      Value to subtract.
  1873.  
  1874.         Notes:  The result is treated as a 10.2 float value.
  1875.  
  1876.       Example:  SUB Temp Price Tax  ;Temp = Price - Tax
  1877.                 SUB Tot Price 3     ;Tot = Price - 3
  1878.  
  1879.  
  1880.     --------------------------------------------------------------------------
  1881.     SWITCH <field>
  1882.       CASE [<val>|<field>]
  1883.         <stmnts>
  1884.         BREAK
  1885.       [CASE <val>|<field>
  1886.         <stmnts>
  1887.         BREAK]
  1888.     SWITCH END
  1889.     --------------------------------------------------------------------------
  1890.  
  1891.          Desc:  The SWITCH/CASE/BREAK clause allows processing based on a
  1892.                 selected number of values, and is most often used in menu
  1893.                 processing. If a variable name is not provided with the CASE
  1894.                 statement, it is used as the default CASE. Note that the
  1895.                 default CASE *must* be the last CASE statement in the SWITCH
  1896.                 clause.
  1897.  
  1898.         Parms:  Variable
  1899.  
  1900.         Notes:  none
  1901.  
  1902.       Example:  FIELDS
  1903.                   Sel  _  C
  1904.                 FIELDS
  1905.                 ;
  1906.                 :SelMenu
  1907.                   TEXT   "------------------------------------------------"
  1908.                   TEXT   "  Order Menu"
  1909.                   TEXT   "------------------------------------------------"
  1910.                   TEXT   " 1. XT             9. Exit"
  1911.                   TEXT   " 2. 286"
  1912.                   TEXT   " 3. 386"
  1913.                   TEXT   " 4. 486"
  1914.                   TEXT   ""
  1915.                   PROMPT "Selection: " Sel
  1916.                   SWITCH  Sel
  1917.                     CASE "1"
  1918.                       GOTO  Sel1
  1919.                       BREAK
  1920.                     CASE "2"
  1921.                       GOTO  Sel2
  1922.                       BREAK
  1923.                     CASE "3"
  1924.                       GOTO  Sel3
  1925.                       BREAK
  1926.                     CASE "4"
  1927.                       GOTO  Sel4
  1928.                       BREAK
  1929.                     CASE "9"
  1930.                       GOTO  EndJob
  1931.                       BREAK
  1932.                     CASE
  1933.                       TEXT   " Invalid Selection. Please try again."
  1934.                       BREAK
  1935.                   SWITCH  END
  1936.                   GOTO SelMenu
  1937.  
  1938.                   :Sel1
  1939.                     TEXT "You entered 1"
  1940.                     GOTO SelMenu TOP
  1941.                   :Sel2
  1942.                     TEXT "You entered 2"
  1943.                     GOTO SelMenu TOP
  1944.                   :Sel3
  1945.                     TEXT "You entered 3"
  1946.                     GOTO SelMenu TOP
  1947.                   :Sel4
  1948.                     TEXT "You entered 4"
  1949.                     GOTO SelMenu TOP
  1950.  
  1951.                   :EndJob
  1952.                    TEXT "You entered 9"
  1953.                    EXIT
  1954.  
  1955.  
  1956.  
  1957.     --------------------------------------------------------------------------
  1958.     UCASE <var>
  1959.     --------------------------------------------------------------------------
  1960.  
  1961.          Desc:  Converts all characters in "var" to upper case.
  1962.  
  1963.         Parms:  var       The variable to modify.
  1964.  
  1965.         Notes:  none
  1966.  
  1967.       Example:  UCASE Occupation
  1968.  
  1969.  
  1970.     --------------------------------------------------------------------------
  1971.     UPDATE_USER_RECORD
  1972.     --------------------------------------------------------------------------
  1973.  
  1974.          Desc:  Update the user record with new security level. If this
  1975.                 command is not executed, the user record is *not* updated.
  1976.  
  1977.         Parms:  none
  1978.  
  1979.         Notes:  none
  1980.  
  1981.       Example:  INCREASE 1 10
  1982.                 UPDATE_USER_RECORD
  1983.  
  1984.  
  1985.     --------------------------------------------------------------------------
  1986.     WRITEFILE <lun> <format>
  1987.     --------------------------------------------------------------------------
  1988.  
  1989.          Desc:  Write a data record to the file specified by 'lun', using the
  1990.                 variables contained in 'format'. The record is written using
  1991.                 the first field in 'format' as a key.
  1992.  
  1993.         Parms:  lun       This is the Logical Unit Number, and must be a
  1994.                           number from 0 to 9.
  1995.                 format    The name of the FORMAT for this file.
  1996.  
  1997.         Notes:  If the key currently exist in the data file, it will be
  1998.                 updated with the new record (from memory). If it does not
  1999.                 exist, it will be added to the data file.
  2000.  
  2001.                 The macro "@file_stat@" contains the result of the last data
  2002.                 file operation performed by PCBSuperScript. All data file
  2003.                 functions load this macro with "*OK*" if no error occurred.
  2004.                 This macro should be checked after a data file function to
  2005.                 insure proper script operation. See ORDER.DEF for examples of
  2006.                 these commands.
  2007.  
  2008.       Example:  OPENFILE  0 J:\PCB\SS\DATA.DAT
  2009.                 READFILE  0 DatFmt
  2010.                 SET UFlag 1
  2011.                 WRITEFILE 0 DatFmt
  2012.                 CLOSEFILE 0
  2013.  
  2014.  
  2015.   PCBoard Macros and Environmental Variables
  2016.   -----------------------------------------------------------------------------
  2017.  
  2018.     The following PCBoard Macros are available:
  2019.  
  2020.       Caller Information
  2021.       ------------------
  2022.         @bps@             Connect Speed
  2023.         @city@            City
  2024.         @comment1@        Comment line 1
  2025.         @comment2@        Comment line 2
  2026.         @confnum@         Current Conference Number
  2027.         @dataphone@       Business/Data Phone
  2028.         @daybytes@        Daily D/L Bytes
  2029.         @dlbytes@         Total D/L Bytes
  2030.         @dlfiles@         Total D/L Files
  2031.         @expertmode@      Expert mode
  2032.         @expdate@         Expiration Date
  2033.         @file_stat@       Status of last PCBSuperScript file command
  2034.         @first@           First Name (first letter capitalized)
  2035.         @firstu@          First Name (all caps)
  2036.         @graphics@        0 = not in graphics mode, 1 = in graphics mode
  2037.         @homephone@       Home/Voice Phone
  2038.         @lastdateon@      Last Date On
  2039.         @lasttimeon@      Last Time On
  2040.         @minleft@         Minutes Left
  2041.         @msgleft@         Number of Messages Written
  2042.         @msgread@         Number of Messages Read
  2043.         @numtimeson@      Number of Times On
  2044.         @pagelen@         Page length setting
  2045.         @password@        User password
  2046.         @port@            Port id
  2047.         @proltr@          Default Protocol Letter
  2048.         @security@        Security Level
  2049.         @shell_stat@      Status of last PCBSuperScript shell command
  2050.         @timelimit@       Time Limit
  2051.         @timeused@        Time Used
  2052.         @totaltime@       Total Time Used so far Today
  2053.         @upbytes@         Total U/L Bytes
  2054.         @upfiles@         Total U/L Files
  2055.         @user@            Full Name (all caps)
  2056.  
  2057.       System Information
  2058.       ------------------
  2059.         @boardname@       Name of the BBS you are on
  2060.         @event@           Event Time
  2061.         @node@            Node Number
  2062.         @sysdate@         Current Date
  2063.         @systime@         Current Time
  2064.         @ss_version@      PCBSuperScript version number
  2065.  
  2066.  
  2067.       Display Controls
  2068.       ----------------
  2069.         @automore@        treats "more?" prompts in a file like @pause@
  2070.  
  2071.         @beep@            sends a CTRL-G (ascii BELL character) to the
  2072.                           caller but is not heard on the local machine
  2073.                           unless the Caller Alarm is turned on
  2074.  
  2075.         @cls@             clear the entire screen
  2076.  
  2077.         @clreol@          clear from the cursor to the end of the line
  2078.  
  2079.         @more@            cause a "more?" prompt to be displayed
  2080.  
  2081.         @pause@           displays a "more?" prompt with a 10 second auto
  2082.                           return if the caller doesn't answer it first
  2083.  
  2084.         @poff@            Turns Prompts OFF (disables "more?" prompt)
  2085.  
  2086.         @pon@             Turns Prompts ON  (enables  "more?" prompt)
  2087.  
  2088.         @qoff@            disables CTRL-X/CTRL-K checking (display abort)
  2089.  
  2090.         @qon@             enables CTRL-X/CTRL-K checking  (display abort)
  2091.  
  2092.         @wait@            display a "press enter to continue" prompt
  2093.  
  2094.  
  2095.  
  2096.       Environmental variables are variables that are currently defined in your
  2097.     DOS environment. Environmental variables are accessed in the following
  2098.     manner:
  2099.  
  2100.         @%name      Access environmental variable "name".
  2101.  
  2102.  
  2103.       Whenever a PCBoard Macro or Environmental variable is referenced in a
  2104.     script, the current value of the variable is substituted for the variable
  2105.     name.
  2106.  
  2107.  
  2108.  
  2109.   Command Summary List
  2110.   -----------------------------------------------------------------------------
  2111.  
  2112.         ACCEPT                Accept user input from a specific row/col.
  2113.         ADD                   Add two values together.
  2114.         ANS_ATTR              Set attribute of the user "answer" text.
  2115.         BEEPS                 Turn beeps on/off.
  2116.         BREAK                 End of CASE statement.
  2117.         CLEARCRT              Clear screen of user.
  2118.         CLEARLINES            Clear lines on the screen.
  2119.         CLOSEFILE             Close data file.
  2120.         COLOR                 Set display color.
  2121.         DEC                   Decrement a variable by 1.
  2122.         DECREASE              Decrease security level.
  2123.         DELAY                 Pause script execution
  2124.         DISPLAY               Display text at row/col.
  2125.         DISPLAYC              Display centered text at row.
  2126.         DISPLAY_FILE          Display the contents of a text file.
  2127.         DIV                   Divide two values.
  2128.         ESET                  Set environmental variable.
  2129.         EXIT                  Quit script and return to PCBoard.
  2130.         FIELDS                Define data entry fields.
  2131.         FLUSH_KB              Clear any keystrokes buffered at the keyboard.
  2132.         FORCE_ENTER           Force user to press enter to continue.
  2133.         FORMAT                Define format for file operations.
  2134.         GETWORD               Get next word from string.
  2135.         GOTO                  Branch script execution to new label.
  2136.         GOTORC                Position cursor to row, col.
  2137.         IF/ELSE/ENDIF         Decision processing.
  2138.         INC                   Increment a variable by 1.
  2139.         INCLUDE               Include file at current script position.
  2140.         INCREASE              Increase security level.
  2141.         INDENT                Indent display area.
  2142.         LCASE                 Set data field to all lower case.
  2143.         LOGMSG                Write msg to caller log file.
  2144.         LOG_DATA              Write data to log file name and with format
  2145.         MAX_ATTR              Set attribute of the max char in prompts.
  2146.         MAX_CHAR              Set the max char used in prompts.
  2147.         MIN_ATTR              Set attribute of the min char in prompts.
  2148.         MIN_CHAR              Set the min char used in prompts.
  2149.         MSG                   Enter message into message base.
  2150.         MUL                   Multiply two values.
  2151.         NEWLINE               Print a blank line to the screen.
  2152.         NULL_ENTRY            Branch if previous prompt entry was null.
  2153.         OPENFILE              Open data file.
  2154.         PARSE                 Setup string for GETWORD parsing.
  2155.         PROMPT                Formatted user input.
  2156.         READFILE              Read data from input file, into format.
  2157.         REPEAT                Repeat a char 'x' times to the screen.
  2158.         SEC_LOOKUP            Modify security level based on file lookup.
  2159.         SEC_TABLE             Modify security level based on current value.
  2160.         SET                   Assign new value to variable.
  2161.         SHELL                 Perform DOS shell.
  2162.         SUB                   Subtract two values.
  2163.         SWITCH/CASE/ENDCASE   Decision processing.
  2164.         TEXT                  Display text to the user screen.
  2165.         UCASE                 Set data field to all upper case.
  2166.         UPDATE_USER_RECORD    Update PCBoard USER file with new info.
  2167.         WRITEFILE             Write data to input file, from format.
  2168.  
  2169.  
  2170.